\section{Particularidades de la red entrenada} 
	\label{chap:particularidadesRedEntrenada}
	%\epigraph{El ajedrez, como todas las demás cosas, puede aprenderse hasta un punto y no más allá. Lo demás depende de la naturaleza de la persona}{José Raúl Capablanca\newline(Ex-campeón mundial de ajedrez)}

	\subsection{Procesamiento de la posición para ser presentado a la Red}
		
		En este capítulo se explica la forma en que se procesaron las posiciones para presentárselas a la red, basándose en los estándares actuales del ajedrez y tomando como insumo la información que se presentó en el capítulo \ref{chap:ajedrezCasoEstudio}.\\
		
		También, se va a explicar como se programó la red neuronal y sus características particulares.
		
		\subsubsection[Estándares de formato de posiciones en ajedrez]{ Estándares de formato de posiciones en ajedrez}
		
			Existe un formato estándar para
			la comunicación de bases de datos de ajedrez. Todos los motores de ajedrez investigados en esta tesis pueden leerlo. Su
			nombre es ``Portable Game Notation'' o PGN. Dentro de su estándar, incluye la posibilidad de llevar la posición a partir de
			un punto. Esta posición se guarda en la notación Forsyth-Edwards (FEN por sus siglas en inglés). A continuación se muestra
			una posición y su respectivo FEN a modo de ejemplo:
			
			\begin{figure}[htp]
				\centering
				%\includegraphics[width=0.4\textwidth]{images/TesisERJ-img/TesisERJ-img035.png} 
				\smallboard
				\fenboard{r3kb1r/1p3ppp/p1n1pn2/2pq4/6b1/2PP1N2/PP1N1PPP/R1BQRBK1 w kq - 0 11}
				\showboard
				\\[0.2cm]
				\caption{Posición arbitraria de ajedrez}
				\label{fig:posArbitrariaAjedrez}
			\end{figure}
			
			El valor FEN de la figura \ref{fig:posArbitrariaAjedrez} es:\\
			
			\texttt{r3kb1r/1p3ppp/p1n1pn2/2pq4/6b1/2PP1N2/}
			\texttt{PP1N1PPP/R1BQRBK1 w kq - 0 11}\\
			
			El estándar está en inglés por lo los nombres de las piezas son representados por su primera letra en ese
			idioma, utilizando mayúsculas para las blancas y minúsculas para las negras. El tablero se ve desde la perspectiva del
			blanco, la fila 8 (fila ``más alta'' en la figura \ref{fig:posArbitrariaAjedrez}) está compuesta por (\texttt{r3kb1r}): torre negra, seguida de escaques
			(casillas) vacíos, el rey negro, alfil negro, un escaque vacío y una torre negra. Así sucesivamente se puede armar la
			posición del tablero hasta el primer espacio. La siguiente letra que aparece luego del primer espacio, indica el turno, qué
			bando es el próximo en jugar, ``\texttt{w}'' para las blancas (por el inglés ``white'') y ``\texttt{b}'' para las negras (por el inglés
			``black''). El resto de campos tiene otra información como posibilidad de enroque, casillas que se pueden tomar al paso,
			número de jugadas desde la última movida de peón (importante si se quisiera pedir las tablas por la regla de 50 movimientos
			sin movimiento de peones) y el número de jugada que aquella posición representó en la partida, pero ninguna de ellas va a
			ser tomada para presentarse en la red neuronal, se consideran esos datos, principalmente para programas de ajedrez.\\
			
			Para la selección de las partidas utilizadas en esta tesis, se utilizó el formato PGN y el programa desarrollado, recibe
			la posición FEN presente en los archivos PGN, de modo que este programa sea perfectamente portable a motores de ajedrez que
			acepten PGN.

		\subsubsection[Parámetros de entrenamiento]{Parámetros de entrenamiento}
			
			Dado que la red fue entrenada utilizando el algoritmo de Backpropagation, se necesitó de dos parámetros que fueran quienes se encargaran de mejorar el proceso de aprendizaje. Los cuales son el error admisible por la red y el coeficiente de aprendizaje.\\

			Para esta red neuronal en particular, se utilizó un error de 0.25 y un coeficiente de aprendizaje de 0.3. Debido a pruebas realizadas en con diversas variantes, se comprobó que estos parámetros evitaban que se estancara en puntos donde la cantidad de errores no variaba con el paso del tiempo y se mantenía constantemente variando dichos errores hasta converger.\\

			Debe de considerarse que el que la cantidad de errores por iteración disminuyera, no implica que el tiempo de entrenamiento se redujera significativamente, la red tarda una semana en entrenarse completamente, dadas las características de la computadora en que se ejecutó. La cual es una Dell XPS M1210 con 1 GB de memoria y un procesador Intel Core 2 Duo. \\

			Por otra parte el lenguaje de desarrollo fue Java, debido a que se cuenta con mucha experiencia en este lenguaje particular y su característica de orientación a objetos facilita el trabajo de las neuronas y la red.\\

			Finalmente, otros parámetros fueron la cantidad de capa y la cantidad de neuronas por capa. Se trabajó con 3 capas, a saber, la de entrada, la oculta y la de salida. 

		\subsection[La capa de entrada y el método de preprocesamiento de posiciones para la red neuronal]{La capa de entrada y el método de preprocesamiento de posiciones para la red neuronal}
		
			Las posiciones primero se pasan por un tratamiento donde se le asignan un número a cada una de las piezas, negativo para
			las blancas y positivo para las negras, esto se asignó arbitrariamente dado que es necesario poder diferenciarlas y
			reconocer cuando las piezas tienen el mismo valor, sólo que de bandos opuestos. La numeración de cada pieza se hizo acorde
			con el cuadro \ref{fig:posArbitrariaAjedrez}.\\\\

			\begin{table}[h!]
				\centering
				\begin{tabular}{|l|l|l|}
					\hline
					\textbf{Pieza} & \textbf{Valor Blanco} & \textbf{Valor Negro}\\
					\hline
					Rey & -6 & 6\\
					\hline
					Dama & -7 & 7\\
					\hline
					Peón & -2 & 2\\
					\hline
					Alfil & -4 & 4\\
					\hline
					Torre & -3 & 3\\
					\hline
					Caballo & -5 & 5\\
					\hline
				\end{tabular}
				\caption{Numeración de las piezas}
				\label{tab:numeracionPiezas}
			\end{table}
			
			La razón por la que se optó por una numeración distinta a la usual en el ajedrez, radica en que tras haber probado
			diferentes configuraciones, ésta resultó ser una de las mejores, esto porque al haber realizado varias pruebas en que se entrenaba la red parcialmente, por alguna razón particular, la red tendía a converger más rápidamente con dichos valores.\\
			
			La forma en como se le presentó posiciones a la red significó 65 entradas, 64 que representaban las 64 casillas del tablero y una más para indicar el turno. Las casillas se les asigna un número de acuerdo con la ficha que está ubicada en ella, las casillas vacías son rellenadas con el bando que la domine, esto es un proceso bastante determinístico y para ello se utilizó un código realizado por el autor.  A la casilla libre se le coloca un \(1\) en caso que la casilla esté dominada por las negras o un \(-1\), en caso que la casilla esté
			dominada por las blancas. Si hubiese una casilla que está igualmente dominada por negras y blancas, entonces su valor sería
			\(0\).\\

		La figura \ref{fig:posAjedrezRespectivaEntrada} muestra un ejemplo de esta codificación

		
			\begin{figure}[h!]
				\centering
				\subfloat[Posición arbitraria de ajedrez]{
					\smallboard
					\fenboard{r3kb1r/1p3ppp/p1n1pn2/2pq4/6b1/2PP1N2/PP1N1PPP/R1BQRBK1 w kq - 0 11}
					\showboard
				}
				\qquad
				\subfloat[Entrada de red neuronal] {
					\begin{tabular}{ c || c c c c c c c c }
						8 &  3.0 &  1.0 &  1.0 &  1.0 &  6.0 &  4.0 &  1.0 &  3.0\\[1pt]
						7 &  1.0 &  2.0 &  0.0 &  1.0 &  1.0 &  2.0 &  2.0 &  2.0\\[1pt]
						6 &  2.0 &  0.0 &  5.0 &  0.0 &  2.0 &  5.0 &  0.0 &  0.0\\[1pt]
						5 &  1.0 &  1.0 &  2.0 &  7.0 & -1.0 &  1.0 & -1.0 &  1.0\\[1pt]
						4 & -1.0 &  1.0 & -1.0 &  0.0 & -1.0 &  0.0 &  4.0 & -1.0\\[1pt]
						3 & -1.0 & -1.0 & -2.0 & -2.0 & -1.0 & -5.0 & -1.0 & -1.0\\[1pt]
						2 & -2.0 & -2.0 & -1.0 & -5.0 & -1.0 & -2.0 & -2.0 & -2.0\\[1pt]
						1 & -3.0 & -1.0 & -4.0 & -7.0 & -3.0 & -4.0 & -6.0 & -1.0\\[1pt]
						\hline \hline
						\textbf{-10} & a & b & c & d & e & f & g & h\\[1pt]
					\end{tabular}
				}
				\\[0.2cm]
				\caption{Ejemplo de procesamiento de las posiciones}
				\label{fig:posAjedrezRespectivaEntrada}
			\end{figure}

		
		También se probaron otros formatos de entrada y se encontró que no siempre convergían, muchos de ellos se pueden explicar porque contaban con muchos valores en cero (debido a casillas vacías) lo que perjudicaba su análisis.

		\subsection[Análisis de la salida]{Análisis de la salida}
			
			La red fue entrenada utilizando seis neuronas de salida. Cada una de ellas representa un nivel y bando de ventaja, a saber: Ventaja decisiva blanca, Ventaja decisiva negra, Ventaja blanca, Ventaja negra, Ligera Ventaja blanca y Ligera Ventaja negra. En el caso de igualdad, la red fue entrenada para que ninguna de las salidas se activara.\\

			A pesar de esto, la red suele activar varias salidas cuando ambas partes tienen diferentes dominios sobre el tablero. Para solucionar este aspecto, se puso un umbral de activación a la capa de salida, inspirado en el modelo de Kohonen. El umbral mencionado fue de \(0.22\). Entonces, sólo se iban a tomar en cuenta aquellas neuronas cuyo valor final, tras evaluar una posición cualquiera superara el \(0.22\). La idea consiste entonces en poder obtener una valoración multiplicando cada una de las salidas por una constante y sumando el resultado final, de modo que la valoración esté dada en un rango de \([-3, 3]\). Tal y como se realiza actualmente por los programas, donde las valoraciones son como se describen en la tabla \ref{tab:valoracionesUtilizadas}.

			\begin{table}[h!]
				\centering
				\begin{tabular}{|l|c|}
					\hline
					\textbf{Tipo de ventaja} & \textbf{Valor numérico}\\
					\hline
					Ventaja decisiva blanca & 3\\
					\hline
					Ventaja blanca & 2\\
					\hline
					Ligera ventaja blanca & 1\\
					\hline
					Igualdad & 0\\
					\hline
					Ligera ventaja negra & -1\\
					\hline
					Ventaja negra & -2\\
					\hline
					Ventaja decisiva negra & -3\\
					\hline
				\end{tabular}
				\caption{Valoraciones utilizadas por el programa}
				\label{tab:valoracionesUtilizadas}
			\end{table}
